package com.coolbi.onsupai.core.dao;

import java.util.List;
import java.util.Map;

/**
 * @Description Base DAO DAO基类
 * @author for2cold
 * @codeDate 2012-6-19 上午09:54:32
 *
 * @param <T>
 */
public interface BaseDao<T> {

	/** 
	 * 持久化对象
	 * @param obj 要持久化的对象
	 * @return
	 */
	T save(T obj);
	
	/**
	 * 根据ID删除对象
	 * @param id 对象ID
	 * @return
	 */
	int delete(long id);
	
	/**
	 * 更新对象
	 * @param obj 要持久化的对象
	 * @return
	 */
	int update(T obj);
	
	/**
	 * 根据ID获取对象
	 * @param id 对象ID
	 * @return
	 */
	T get(long id);
	
	/**
	 * 获取所有对象集合
	 * @return
	 */
	List<T> list();
	
	/**
	 * 分页获取对象集合
	 * @param offset 偏移量
	 * @param limit 最大返回条数
	 * @return
	 */
	List<T> listByPage(int offset, int limit);
	
	/**
	 * 根据参数获取对象集合
	 * @param paramter 参数集合
	 * @return
	 */
	List<T> find(Map<String, Object> parameter);
	
	/**
	 * 根据参数分页获取对象集合
	 * @param parameter 参数集合
	 * @param offset 偏移量
	 * @param limit 最大返回条数
	 * @return
	 */
	List<T> findByPage(Map<String, Object> parameter, int offset, int limit);
	
	/**
	 * 根据关键字分页、模糊获取对象集合
	 * @param keyWord 关键字
	 * @param offset 偏移量
	 * @param limit 最大返回条数
	 * @return
	 */
	List<T> search(Map<String, Object> parameter, int offset, int limit);
	
	/**
	 * 获取记录总条数
	 * @return
	 */
	int count();
	
	/**
	 * 根据关键字获取记录条数
	 * @param parameter
	 * @return
	 */
	int countByKeyWord(Map<String, Object> parameter);

	/**
	 * 根据参数获取记录条数
	 * @param parameter 参数集合
	 * @return
	 */
	int count(Map<String, Object> parameter);
}
